// Copyright 2022 Linkall Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package ce

import (
	// standard libraries.
	"testing"
	"time"

	// third-party libraries.
	. "github.com/smartystreets/goconvey/convey"
	. "go.uber.org/mock/gomock"

	// this project.
	blktest "github.com/vanus-labs/vanus/server/store/block/testing"
)

func TestField(t *testing.T) {
	ctrl := NewController(t)
	defer ctrl.Finish()

	now := time.Now()
	entry := blktest.NewMockEntry(ctrl)
	entry.EXPECT().GetUint16(EntryTypeOrdinal).Return(CloudEvent)
	entry.EXPECT().GetInt64(SequenceNumberOrdinal).Return(int64(1))
	entry.EXPECT().GetInt64(StimeOrdinal).Return(now.UnixMilli())

	Convey("get fields", t, func() {
		So(EntryType(entry), ShouldEqual, CloudEvent)
		So(SequenceNumber(entry), ShouldEqual, int64(1))
		So(Stime(entry), ShouldEqual, now.UnixMilli())
	})
}
